/**
 * csv file to 2D arr
 * */
function importCSV(){
    if( typeof(FileReader) == 'undefined' ){    //if not H5
        alert("IE9及以下浏览器不支持，请使用Chrome或Firefox浏览器\nYour browser is too old,please use Chrome or Firefox");
        return false;
    }
    if( ! $(this)[0].files[0]){
        alert("请选择文件\nPlease select a file");
        return false;
    }
    var fReader = new FileReader();
    fReader.readAsDataURL( $(this)[0].files[0] );
    $fileDOM = $(this);
    fReader.onload = function(evt){
        var data = evt.target.result;
        var wb = XLSX.read(data, { type: 'binary' });
        /* 获取第一个工作表*/
        var wsname = wb.SheetNames[0];
        var ws = wb.Sheets[wsname];
//        console.log( data );
        var encoding = checkEncoding( data );
//        console.log(encoding);
        //转换成二维数组，需要引入Papaparse.js
        Papa.parse( $($fileDOM)[0].files[0], {
            encoding: encoding,
            complete: function(results) {        // UTF8 \r\n与\n混用时有可能会出问题
//                console.log(results);
                var res = results.data;
                if( res[ res.length-1 ] == ""){    //去除最后的空行
                    res.pop();
                }
                let opts = {
                    dateNF: 'm/d/yy h:mm',
                    cellDates: true,
                    cellStyles: true
                }
                 ws = XLSX.utils.aoa_to_sheet(res, opts)
                 let htmldata = XLSX.utils.sheet_to_html(ws);
                 /* 调用数据转换方法将数据格式转换成Luckysheet格式*/
                 readFile(htmldata);
            }
        });
    }
    fReader.onerror = function(evt){
//        console.log(evt);
        alert("文件已修改，请重新选择(Firefox)\nThe file has changed,please select again.(Firefox)");
    }
    
    //检查编码，引用了 jschardet
    function checkEncoding( base64Str ){
        //这种方式得到的是一种二进制串
        var str = atob( base64Str.split(";base64,")[1] );
//        console.log(str);
        //要用二进制格式
        var encoding = jschardet.detect( str );
        encoding = encoding.encoding;
//        console.log( encoding );
        if( encoding == "windows-1252"){    //有时会识别错误（如UTF8的中文二字）
            encoding = "ANSI";
        }
        return encoding;
    }
}
//导出CSV
function exportCsv() {
    let allSheetData = luckysheet.getluckysheetfile();
    let sheet1 = allSheetData[0];
    let downOriginData = sheet1.data;
    // 该方法会返回一个数组结构，其中包含了我们所创建的所有的sheet数据
    // allSheetData = [{sheet1},{sheet2},{sheet3}]
    let arr = [];  // 所有的单元格数据组成的二维数组
    let bgConfig = {};
    let percentageReg = /%$/;
    let cellValue = null;
    // 获取单元格的背景色
    function setBackground(row, col, bg) {
        var colA = luckysheet.luckysheetchatatABC(col);
        var key = colA + (row + 1);
        bgConfig[key] = bg.replace(/\#?/, '');
    }

    // 判断值类型是否为百分比 %
    function isPercentage(value) {
        return percentageReg.test(value.m) && value.ct && value.ct.t === 'n'
    }

    // 获取二维数组
    for (let row = 0; row < downOriginData.length; row++) {
        let arrRow = [];
        for (let col = 0; col < downOriginData[row].length; col++) {
            if (cellValue = downOriginData[row][col]) {
                // 处理单元格的背景颜色
                if (cellValue.bg) {
                    setBackground(row, col, cellValue.bg)
                }
                if (cellValue.ct != null && cellValue.ct.t == 'd') {
                    //  d为时间格式  2019-01-01   或者2019-01-01 10:10:10
                    arrRow.push(new Date(cellValue.m.replace(/\-/g, '/'))) //兼容IE
                } else if (cellValue.m && isPercentage(cellValue)) {
                    //百分比问题
                    arrRow.push(cellValue.m)
                } else {
                    arrRow.push(cellValue.v)
                }
            }
        }
        arr.push(arrRow)
    }
    let opts = {
        dateNF: 'm/d/yy h:mm',
        cellDates: true,
        cellStyles: true
    }
    let ws = XLSX.utils.aoa_to_sheet(arr, opts)
    //设置单元格的类型
    let reg = /[\u4e00-\u9fa5]/g;
    for (let key in ws) {
        let item = ws[key]
        if (item.t === 'd') {
            if (item.w) {
                //时间格式的设置
                let arr = item.w.split(' ')
                if (arr[1] && arr[1] == '0:00') {
                    ws[key].z = 'm/d/yy'
                } else {
                    item.z = 'yyyy/m/d h:mm:ss'
                }
            }
        } else if (item.t === 's') {
            //百分比设置格式
            if (item.v && !item.v.match(reg) && item.v.indexOf('%') > -1) {
                item.t = 'n'
                item.z = '0.00%'
                item.v = Number.parseFloat(item.v) / 100
            }
            else if (item.v && item.v.match(reg)) {
                //含有中文的设置居中样式
                item['s'] = {
                    alignment: { vertical: 'center', horizontal: 'center' }
                }
            }
        }
        // 设置单元格样式
        if (bgConfig[key]) {
            ws[key]['s'] = {
                alignment: { vertical: 'center', horizontal: 'center' },
                fill: { bgColor: { indexed: 32 }, fgColor: { rgb: bgConfig[key] } },
                border: {
                    top: { style: 'thin', color: { rgb: '999999' } },
                    bottom: { style: 'thin', color: { rgb: '999999' } },
                    left: { style: 'thin', color: { rgb: '999999' } },
                    right: { style: 'thin', color: { rgb: '999999' } }
                }
            }
        }
    }
    //组装下载数据格式
    let name = 'sheet1';
    let tmpWB = {
        SheetNames: [name], //保存的表标题
        Sheets: {
            [name]: Object.assign({}, ws)//内容 
        }
    }
    let mergeConfig = sheet1.config.merge
    let mergeArr = [];
    if (JSON.stringify(mergeConfig) !== '{}') {
        mergeArr = handleMergeData(mergeConfig)
        tmpWB.Sheets[name]['!merges'] = merge
    }
    //处理合并单元格config数据
    function handleMergeData(origin) {

        let result = []
        if (origin instanceof Object) {
            var r = "r",
                c = "c",
                cs = "cs",
                rs = "rs";
            for (var key in origin) {
                var startR = origin[key][r];
                var endR = origin[key][r];
                var startC = origin[key][c];
                var endC = origin[key][c];

                // 如果只占一行 为1 如果占两行 为2
                if (origin[key][cs] > 0) {
                    endC = startC + (origin[key][cs] - 1);
                }
                if (origin[key][rs] > 0) {
                    endR = startR + (origin[key][rs] - 1);
                }
                // s为合并单元格的开始坐标  e为结束坐标
                var obj = { s: { "r": startR, "c": startC }, e: { "r": endR, "c": endC } }
                result.push(obj)
            }
        }
        return result
    }
    let fileName = 'test';
    // sheetjs js-xlsx 的方法 ，不能设置单元格格式
    XLSX.writeFile(tmpWB, fileName + ".csv");
}


//读csv文件
function importCSV2(event) {
    var data = [];
    var file = event.target.files[0];
    /* 实例FileReader对象 */
    var reader = new FileReader();
    reader.onload = function() {
        var relArr = this.result.split("\r\n");
        if(!$.isEmptyObject(relArr) && relArr.length > 1) {
            for(var key = 0; key < relArr.length; key++) {
                var values = relArr[key];
                if(!$.isEmptyObject(values)) {
                    var objArr = values.split(",");
                    data.push(objArr);
                }
            }
        }
        let ws = XLSX.utils.aoa_to_sheet(data)
        let htmldata = XLSX.utils.sheet_to_html(ws);
                /* 调用数据转换方法将数据格式转换成Luckysheet格式*/
                readFile(htmldata);
      
    }
    reader.readAsText(file);
}


